package com.bfly.core.context;

import com.bfly.mall.admin.entity.Admin;

/**
 * 用户Admin对象保存ThreadLocal
 *
 * @author 长沙商脉科技有限公司
 * @date 2019/6/26 18:43
 */
public class AdminThreadLocal implements IThreadLocalContext {

    private static AdminThreadLocal instance;
    private ThreadLocal<Admin> threadLocal = new ThreadLocal<>();

    private AdminThreadLocal() {
    }

    private static synchronized AdminThreadLocal getInstance() {
        if (instance == null) {
            instance = new AdminThreadLocal();
        }
        return instance;
    }

    /**
     * 设置Admin到当前线程变量中
     *
     * @author 长沙商脉科技有限公司
     * @date 2018/12/8 9:45
     */
    public static void set(Admin admin) {
        getInstance().threadLocal.set(admin);
    }

    /**
     * 从当前线程变量中获取Admin
     *
     * @author 长沙商脉科技有限公司
     * @date 2018/12/8 9:46
     */
    public static Admin get() {
        return get(false);
    }

    /**
     * 从当前线程变量中获取Admin对象,并标识是否移除数据 false表示保留
     *
     * @author 长沙商脉科技有限公司
     * @date 2018/12/8 9:46
     */
    public static Admin get(boolean isRemove) {
        Admin admin = getInstance().getData(getInstance().threadLocal);
        if (!isRemove) {
            set(admin);
        }
        return admin;
    }

    /**
     * 清除数据
     *
     * @author 长沙商脉科技有限公司
     * @date 2019/6/27 16:16
     */
    public static void clear() {
        getInstance().threadLocal.remove();
    }
}
